package com.aipartner.mapper;

import com.aipartner.entity.UserFavorite;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 用户收藏 Mapper 接口
 *
 * @author AI Partner Team
 * @since 2024-01-20
 */
@Mapper
public interface UserFavoriteMapper extends BaseMapper<UserFavorite> {

    /**
     * 分页查询用户收藏列表
     *
     * @param page 分页对象
     * @param userId 用户ID
     * @param contentType 内容类型，为空时查询所有类型
     * @return 收藏列表
     */
    IPage<UserFavorite> selectUserFavoritesPage(
            Page<UserFavorite> page, 
            @Param("userId") Long userId, 
            @Param("contentType") String contentType
    );

    /**
     * 检查用户是否已收藏某个内容
     *
     * @param userId 用户ID
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 收藏记录，如果未收藏则返回null
     */
    UserFavorite selectByUserAndContent(
            @Param("userId") Long userId, 
            @Param("contentType") String contentType, 
            @Param("contentId") String contentId
    );

    /**
     * 统计用户收藏数量
     *
     * @param userId 用户ID
     * @return 收藏总数
     */
    Long countByUserId(@Param("userId") Long userId);

    /**
     * 按内容类型统计用户收藏数量
     *
     * @param userId 用户ID
     * @param contentType 内容类型
     * @return 该类型收藏数量
     */
    Long countByUserIdAndType(@Param("userId") Long userId, @Param("contentType") String contentType);

    /**
     * 删除某个内容的所有收藏记录（用于级联删除）
     *
     * @param contentType 内容类型
     * @param contentId 内容ID
     * @return 删除的记录数
     */
    int deleteByContentTypeAndId(@Param("contentType") String contentType, @Param("contentId") String contentId);
}
